package myutil.mylist;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Random;
import myutil.mymap.MyHashMap;
import myutil.mymap.MyTreeMap.SimpleEntry;
import myutil.mymap.MyMap;
import myutil.mymap.MyTreeMap;

/**
 * Class for Debug only!!!
 * @author Hlib_Babii
 */
public class MyUtil {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws InterruptedException {
//        MyList<Integer> list = new MyLinkedList<Integer>();
//        Integer[] a = {1, 6, 7, 9, 3, 5, 3, 3, 3, 7, 9, -3};
//        list.addAll(a);
//        MyCollections.sort(list);
//        MyCollections.reverse(list);
//
//        Object[] arr = list.toArray();
//        for (int i = 0; i < arr.length; i++) {
//            System.out.print(arr[i] + " ");
//        }
//        System.out.println();
//
//        MyList list2 = new MyArrayList();
//        MyCollections.copy(list2, list);
//        MyCollections.reverse(list2);
//
//        arr = list2.toArray();
//        for (int i = 0; i < arr.length; i++) {
//            System.out.print(arr[i] + " ");
//        }
//        System.out.println();
//
//        System.out.println(MyCollections.binarySearch((RandomAccess) list2, 2));
//        System.out.println(list.get(0));
//        System.out.println(list.isEmpty());
//        System.out.println(list.indexOf("1"));

//        MyMap m = new MyHashMap();
//        final Random rand = new Random();
//        for (int i = 0; i < 1000; i++) {
//            int k = rand.nextInt();
//            System.out.println(k);
//            m.put(k, k * 1000);
//        }
        
//        MyStack<Integer> stack = new MyLinkedList<>();
//        stack.push(1);
//        stack.push(4);
//        System.out.println(stack.pop());
//        System.out.println(stack.pop());
//        
//        MyMap<Integer, Integer> map = new MyTreeMap<>();
//        map.put(1, 1);
//        map.put(5, 5);
//        map.put(2, 2);
//        map.put(3, 3);
//        map.put(7, 7);
//        map.put(4, 4);
//        map.put(6, 6);
//        map.put(8, 8);
//        Iterator<SimpleEntry<Integer, Integer>> it = map.entryIterator();
//        while (it.hasNext()) {
//            System.out.println(it.next().getKey());
//        }
        //randomAddedDeleter(500);
        MyMap<String, String> map, map2;
        map = new MyHashMap<>();
        map2 = new MyHashMap<>();
        System.out.println(map.equals(map2));
    }

    private static void randomAddedDeleter(int howMany) {
        final Random rand = new Random();
        MyMap<Integer, Integer> map2 = new MyTreeMap<>();
        for (int i = 0; i < howMany; i++) {
            final int key = rand.nextInt(howMany * 2);
            System.out.println("Adding " + key + " to map...");
            map2.put(key, 0);
            //((MyTreeMap)map2).log();
        }    
        while (!map2.isEmpty()) {
            final int key = rand.nextInt(howMany * 2);
            System.out.println("Removing " + key + " from map...");
            map2.remove(key);
            //((MyTreeMap)map2).log();
        }
    }
}
